home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1997-10-26 | 22.0 KB | 571 lines |
- (*----------------------------------------------------------------------*
- * *
- * MAGICTOOLS Modula's All purpose GEM Interface Cadre Toolbox *
- * ÿ ÿ ÿ ÿ ÿ *
- *----------------------------------------------------------------------*
- * Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
- *----------------------------------------------------------------------*
- * Dieses Modul ist urheberrechtlich geschtzt. *
- * *
- * Die Verffentlichung des Quelltextes oder Teilen daraus, sowie die *
- * Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
- * oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail- *
- * boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen *
- * Einverstndnisserklrung des Autors. *
- * *
- * Die Verbreitung des Moduls als Teil eines gelinkten Programms ist *
- * fr Lizenznehmer ausdrcklich erlaubt! Der Autor behlt sich das *
- * Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
- * widerrufen. *
- *----------------------------------------------------------------------*)
-
- IMPLEMENTATION MODULE mtAlerts;
-
- (*----------------------------------------------------------------------*
- * Int. Vers | Datum | Name | nderung *
- *-----------+----------+------+----------------------------------------*
- * 3.00 | 18.01.92 | Hp | *
- * 3.01 | 09.02.92 | Hp | Vllig berarbeitet und neue Features *
- * | | | eingebaut. Das Modul ist jetzt viel *
- * | | | flexibler einzusetzen. *
- *-----------+----------+------+----------------------------------------*)
-
-
-
- (* IMPLEMENTATION FR >>> Megamax-Modula-2 <<< *)
- (* *)
- (*$R- Range-Checks *)
- (*$S- Stack-Check *)
- (* *)
- (*----------------------------------------------*)
-
- FROM Storage IMPORT ALLOCATE, DEALLOCATE;
-
-
-
-
-
- FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
- Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
- Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
- sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET,
- CastToChar, CastToByte, CastToByteset, CastToInt,
- CastToCard, CastToBitset, CastToWord, CastToLInt,
- CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
- TosVersion, Accessory, Basepage, SysHeader, TosDate;
-
-
-
-
-
-
- FROM SYSTEM IMPORT ADDRESS, ADR, CADR, TSIZE;
-
-
-
- FROM MagicAES IMPORT GBOX, GIMAGE, GIBOX, GBUTTON, GSTRING,
- SELECTABLE, DEFAULT, Exit, LASTOB, OUTLINED,
- DRAW3D, SHADOWED, OBJECT, GrafMkstate,
- PtrBITBLK, GICON, FL3DBAK;
- FROM mtDials IMPORT NewDial, ObjcExtype, GetObjcExtype,
- GetKbdState, CSCREEN, CMOUSE, CPOS, DialCenter,
- DSTART, DSHRINK, DFINISH, DDISABLE, DENABLE,
- DialForm, DialDraw, DialDo, DisposeDial,
- UndoButton, IsOverloadedDialDo;
- FROM mtUtils IMPORT tRect, CalcArea, DoubleClick;
- FROM mtAppl IMPORT CharWidth, CharHeight, BoxWidth, BoxHeight,
- MouseArrow, StoreMouse, RestoreMouse;
- FROM MagicStrings IMPORT Assign, Length;
- FROM MagicConvert IMPORT StrToInt;
- FROM MagicCookie IMPORT FindCookie;
- IMPORT MagicAES, mtRsc;
-
- (*----------------------------------------------------------------------*
- * Resource-Coder 1.03 (C)92 by Peter Hellinger Software *
- *----------------------------------------------------------------------*
- * Inline-Resource erzeugt am 09.02.1992 00:19:48 *
- *----------------------------------------------------------------------*)
-
- TYPE tRscData = ARRAY [0..532] OF CARDINAL;
-
- CONST RscData = tRscData {
- 00001H, 00378H, 00378H, 00378H, 00324H, 00324H, 00024H, 00024H, 00378H,
- 00420H, 00007H, 00001H, 00000H, 00000H, 00006H, 00000H, 00000H, 00424H,
- 00003H, 0C000H, 00006H, 06000H, 0000DH, 0B000H, 0001BH, 0D800H, 00037H,
- 0EC00H, 0006FH, 0F600H, 000DCH, 03B00H, 001BCH, 03D80H, 0037CH, 03EC0H,
- 006FCH, 03F60H, 00DFCH, 03FB0H, 01BFCH, 03FD8H, 037FCH, 03FECH, 06FFCH,
- 03FF6H, 0DFFCH, 03FFBH, 0BFFCH, 03FFDH, 0BFFCH, 03FFDH, 0DFFCH, 03FFBH,
- 06FFCH, 03FF6H, 037FCH, 03FECH, 01BFFH, 0FFD8H, 00DFFH, 0FFB0H, 006FCH,
- 03F60H, 0037CH, 03EC0H, 001BCH, 03D80H, 000DCH, 03B00H, 0006FH, 0F600H,
- 00037H, 0EC00H, 0001BH, 0D800H, 0000DH, 0B000H, 00006H, 06000H, 00003H,
- 0C000H, 03FFFH, 0FFFCH, 0C000H, 00003H, 09FFFH, 0FFF9H, 0BFFFH, 0FFFDH,
- 0DFF8H, 03FFBH, 05FE0H, 00FFAH, 06FC0H, 007F6H, 02F83H, 083F4H, 03787H,
- 0C3ECH, 01787H, 0C3E8H, 01BFFH, 083D8H, 00BFFH, 007D0H, 00DFEH, 00FB0H,
- 005FCH, 01FA0H, 006FCH, 03F60H, 002FCH, 03F40H, 0037CH, 03EC0H, 0017CH,
- 03E80H, 001BFH, 0FD80H, 000BFH, 0FD00H, 000DCH, 03B00H, 0005CH, 03A00H,
- 0006CH, 03600H, 0002FH, 0F400H, 00037H, 0EC00H, 00017H, 0E800H, 0001BH,
- 0D800H, 0000BH, 0D000H, 0000DH, 0B000H, 00005H, 0A000H, 00006H, 06000H,
- 00003H, 0C000H, 0007FH, 0FE00H, 000C0H, 00300H, 001BFH, 0FD80H, 0037FH,
- 0FEC0H, 006FFH, 0FF60H, 00DFFH, 0FFB0H, 01BFFH, 0FFD8H, 037FFH, 0FFECH,
- 06FFFH, 0FFF6H, 0DFFFH, 0FFFBH, 0B181H, 0860DH, 0A081H, 00205H, 0A4E7H,
- 03265H, 0A7E7H, 03265H, 0A3E7H, 03265H, 0B1E7H, 03205H, 0B8E7H, 0320DH,
- 0BCE7H, 0327DH, 0A4E7H, 0327DH, 0A0E7H, 0027DH, 0B1E7H, 0867DH, 0BFFFH,
- 0FFFDH, 0DFFFH, 0FFFBH, 06FFFH, 0FFF6H, 037FFH, 0FFECH, 01BFFH, 0FFD8H,
- 00DFFH, 0FFB0H, 006FFH, 0FF60H, 0037FH, 0FEC0H, 001BFH, 0FD80H, 000C0H,
- 00300H, 0007FH, 0FE00H, 03FFFH, 0FFFCH, 07FFFH, 0FFFEH, 07FF8H, 01FFEH,
- 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF0H,
- 00FFEH, 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF0H, 00FFEH,
- 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF0H,
- 00FFEH, 07FF0H, 00FFEH, 07FF8H, 01FFEH, 07FFCH, 03FFEH, 07FFFH, 0FFFEH,
- 07FFFH, 0FFFEH, 07FFFH, 0FFFEH, 07FFCH, 03FFEH, 07FF8H, 01FFEH, 07FF0H,
- 00FFEH, 07FF0H, 00FFEH, 07FF8H, 01FFEH, 07FFCH, 03FFEH, 07FFFH, 0FFFEH,
- 03FFFH, 0FFFCH, 00000H, 00000H, 03FFFH, 0FFFCH, 07FFFH, 0FFFEH, 07FF8H,
- 01FFEH, 07FE0H, 007FEH, 07F80H, 001FEH, 07F00H, 000FEH, 07E00H, 0007EH,
- 07E01H, 0C07EH, 07E03H, 0C07EH, 07F07H, 080FEH, 07FFFH, 001FEH, 07FFEH,
- 001FEH, 07FFCH, 003FEH, 07FF8H, 007FEH, 07FF8H, 007FEH, 07FF0H, 00FFEH,
- 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF8H, 01FFEH, 07FFCH, 03FFEH, 07FFFH,
- 0FFFEH, 07FFFH, 0FFFEH, 07FFCH, 03FFEH, 07FF8H, 01FFEH, 07FF0H, 00FFEH,
- 07FF0H, 00FFEH, 07FF0H, 00FFEH, 07FF8H, 01FFEH, 07FFCH, 03FFEH, 07FFFH,
- 0FFFEH, 03FFFH, 0FFFCH, 00000H, 00000H, 03FFFH, 0FFFCH, 07FFFH, 0FFFEH,
- 07FFFH, 0FFFEH, 07FFEH, 0FFFEH, 07FFCH, 07FFEH, 07FECH, 067FEH, 07FC4H,
- 047FEH, 07FC4H, 047FEH, 07F44H, 047FEH, 07E44H, 047FEH, 07E44H, 047FEH,
- 07E44H, 047FEH, 07E44H, 047FEH, 07E44H, 047FEH, 07E40H, 0071EH, 07E00H,
- 0061EH, 07E00H, 0061EH, 07E00H, 0043EH, 07E00H, 0003EH, 07E00H, 0007EH,
- 07E00H, 0007EH, 07E00H, 000FEH, 07E00H, 000FEH, 07E00H, 001FEH, 07E00H,
- 001FEH, 07E04H, 003FEH, 07F02H, 007FEH, 07FFFH, 0FFFEH, 07FFFH, 0FFFEH,
- 07FFFH, 0FFFEH, 03FFFH, 0FFFCH, 00000H, 00000H, 00000H, 00024H, 00004H,
- 00020H, 00000H, 00000H, 00001H, 00000H, 000A4H, 00004H, 00020H, 00000H,
- 00000H, 00001H, 00000H, 00124H, 00004H, 00020H, 00000H, 00000H, 00001H,
- 00000H, 001A4H, 00004H, 00020H, 00000H, 00000H, 00001H, 00000H, 00224H,
- 00004H, 00020H, 00000H, 00000H, 00001H, 00000H, 002A4H, 00004H, 00020H,
- 00000H, 00000H, 00001H, 0FFFFH, 00001H, 00006H, 00014H, 00000H, 00000H,
- 000FFH, 01240H, 00001H, 00001H, 00023H, 00804H, 00002H, 0FFFFH, 0FFFFH,
- 00017H, 00000H, 00000H, 00000H, 00324H, 00001H, 00001H, 02000H, 02000H,
- 00003H, 0FFFFH, 0FFFFH, 00017H, 00000H, 00000H, 00000H, 00332H, 00006H,
- 00001H, 02000H, 02000H, 00004H, 0FFFFH, 0FFFFH, 00017H, 00000H, 00000H,
- 00000H, 00340H, 0000BH, 00001H, 02000H, 02000H, 00005H, 0FFFFH, 0FFFFH,
- 00017H, 00000H, 00000H, 00000H, 0034EH, 00011H, 00001H, 02000H, 02000H,
- 00006H, 0FFFFH, 0FFFFH, 00017H, 00000H, 00000H, 00000H, 0035CH, 00017H,
- 00001H, 02000H, 02000H, 00000H, 0FFFFH, 0FFFFH, 00017H, 00020H, 00000H,
- 00000H, 0036AH, 0001DH, 00001H, 02000H, 02000H, 00000H, 00378H, 00000H,
- 00000H, 00000H
- }; (* Ende RscData *)
-
-
-
- (*----------------------------------------------------------------------*)
-
- CONST cMaxChars = 60; (* Maximale Zeichenzahl pro Zeile *)
- cMaxText = 16; (* Maximale Anzahl Zeilen *)
- cMaxButt = 5; (* Maximale Anzahl Buttons *)
- cMaxIcon = 256; (* Maximale Anzahl Iconslots *)
-
- CONST Box = 0;
- Mover = 1;
-
- CONST Left = 0;
- Center = 1;
- Right = 2;
-
- TYPE tString = ARRAY [0..cMaxChars] OF CHAR;
- Objctree = POINTER TO ARRAY [0..MAX(sINTEGER)] OF OBJECT;
-
- VAR Slot: ARRAY [1..cMaxIcon] OF PtrBITBLK;
- Tree: ARRAY [0..23] OF OBJECT;
- Text: ARRAY [1..cMaxText] OF tString;
- Button: ARRAY [1..cMaxButt] OF RECORD
- text: tString;
- objc: sINTEGER;
- END;
- buttmode: sINTEGER;
- IconColor: sINTEGER;
- TheAlert: Objctree;
- Icontree: Objctree;
- rsc: mtRsc.RESOURCE;
- rscData: POINTER TO tRscData;
- inAlert: BOOLEAN;
-
-
- PROCEDURE SetObjc (objc, typ, x, y, w, h: sINTEGER; f, s: sBITSET;
- spec: ADDRESS);
- BEGIN
- Tree[objc].obNext:= -1;
- Tree[objc].obHead:= -1;
- Tree[objc].obTail:= -1;
- Tree[objc].obType:= typ;
- Tree[objc].obFlags:= f;
- Tree[objc].obState:= s;
- Tree[objc].obSpec.address:= spec;
- Tree[objc].obX:= x;
- Tree[objc].obY:= y;
- Tree[objc].obWidth:= w;
- Tree[objc].obHeight:= h;
- MagicAES.ObjcAdd (TheAlert, Box, objc);
- END SetObjc;
-
- PROCEDURE PrepareAlert;
- BEGIN
- Tree[Box].obNext:= -1;
- Tree[Box].obHead:= -1;
- Tree[Box].obTail:= -1;
- Tree[Box].obType:= GBOX;
- Tree[Box].obFlags:= {FL3DBAK};
- Tree[Box].obState:= {OUTLINED};
- Tree[Box].obSpec.Box.char:= 0C;
- Tree[Box].obSpec.Box.frame:= 2C;
- (* Tree[Box].obSpec.Box.flags:= {Bit0,Bit11, Bit12}; *)
- Tree[Box].obSpec.Box.flags:= {Bit11, Bit12};
- (*- Nur einmal setzen, sonst klappt in mtDials 'an letzer Pos' nicht...
- Tree[Box].obX:= 0; Tree[Box].obY:= 0;
- *)
- Tree[Box].obWidth:= 0;
- Tree[Box].obHeight:= 0;
- SetObjc (Mover, 1119H, 0, 0, 16, 16, {}, {OUTLINED}, Null);
- Tree[Mover].obSpec.Box.char:= 0C;
- Tree[Mover].obSpec.Box.frame:= 1C;
- Tree[Mover].obSpec.Box.flags:= {Bit11, Bit12};
- END PrepareAlert;
-
- PROCEDURE Iconslot (slot: sINTEGER): MagicAES.PtrBITBLK;
- BEGIN
- IF (slot > 0) AND (slot < 257) THEN RETURN Slot[slot]; END;
- RETURN NIL;
- END Iconslot;
-
- PROCEDURE SetIconslot (slot: sINTEGER; icon: MagicAES.PtrBITBLK);
- BEGIN
- (* Achtung, Standard-Icons nicht berschreiben! *)
- IF slot < 254 THEN Slot[slot + 3]:= icon; END;
- END SetIconslot;
-
- PROCEDURE IconNum (VAR num : ARRAY OF CHAR): sINTEGER;
- (* Added by Dirk Steins *)
- BEGIN
- IF (num[0] >="A") THEN RETURN ORD (num[0]) - 55;
- ELSE RETURN StrToInt (num)
- END;
- END IconNum;
-
- PROCEDURE idoAlert (xp, yp, mode, def: sINTEGER; REF str: ARRAY OF CHAR): sINTEGER;
- VAR (*$Reg*) i: sINTEGER;
- (*$Reg*) j: sINTEGER;
- (*$Reg*) h: sINTEGER;
- (*$Reg*) cw2: sINTEGER;
- c, text, butt, ioff, tw, bw, w2, hi, objc, y, ypos, typ: sINTEGER;
- num: ARRAY [0..10] OF CHAR;
- icon, bool: BOOLEAN;
- conf, b, set: sBITSET;
- clip, s, x: tRect;
- iblk: PtrBITBLK;
- DefaultButton : BOOLEAN;
- idx : INTEGER;
-
- BEGIN
- (* Initialisieren *)
- PrepareAlert;
- FOR i:= 1 TO cMaxText DO Text[i, 0]:= 0C; END;
- FOR i:= 1 TO cMaxButt DO Button[i].text[0]:= 0C; Button[i].objc:= -1; END;
- FOR i:= 0 TO 10 DO num[i]:= 0C; END;
- i:= 0; h:= Length (str); objc:= 2; cw2:= CharWidth * 2;
- ioff:= cw2; ypos:= CharHeight;
- IF (i >= h) OR (str[0] # '[') THEN RETURN -1; END;
-
- (* Image-Nummer auslesen *)
- i:= 1; j:= 0;
- WHILE str[i] # ']' DO num[j]:= str[i]; INC(i); INC(j); END;
- num[j]:= 0C;
-
- (* Image aus der Image-Liste holen *)
- iblk:= Iconslot (IconNum (num));
- IF iblk # NIL THEN
- INC (ioff, (iblk^.biWb * 8)); INC (ypos, iblk^.biHl + (CharHeight * 2));
- iblk^.biColor:= IconColor;
- SetObjc (2, GIMAGE, CharWidth, CharHeight,
- iblk^.biWb * 8, iblk^.biHl, {}, {}, iblk);
- objc:= 3;
- ELSE
- INC (ypos, CharHeight * 2);
- END;
-
- (* Alles bis zum nchsten '[' berspringen *)
- WHILE (str[i] # '[') DO IF i > h THEN RETURN -1; END; INC (i); END;
-
- (* Textzeilen auslesen. Die einzelnen Zeichen sind durch '|' getrennt *)
- text:= 1; tw:= 0;
- LOOP
- typ:= 0; set:= {};
- j:= 0; INC (i); IF i > h THEN RETURN -1; END;
- WHILE (str[i] # '|') AND (str[i] # ']') AND (i <= h) AND (j < cMaxChars) DO
- IF str[i] = '%' THEN
- CASE str[i + 1] OF
- 'D': INCL (set, OUTLINED); typ:= 01300H; INC (i, 2);|
- 'U': INCL (set, SHADOWED); typ:= 01300H; INC (i, 2);|
- 'F': INCL (set, DRAW3D); typ:= 01300H; INC (i, 2);|
- ELSE Text[text, j]:= str[i];
- Text[text, j + 1]:= str[i + 1];
- INC (i, 2); INC (j, 2);
- END;
- ELSE
- Text[text, j]:= str[i]; INC (i); INC (j);
- END;
- END;
- Text [text, j]:= 0C; c:= j * CharWidth;
- SetObjc (objc, GSTRING + typ, ioff, (text * CharHeight),
- c, CharHeight, {}, set, ADR (Text[text]));
-
- IF tw < (c+ioff) THEN tw:= c + ioff; END;
- INC (objc); INC (text);
- IF (text > cMaxText+1) THEN RETURN - 1; END;
- IF (str[i] = ']') THEN EXIT; END;
- END;
-
- (* Y-Position der Buttons *)
- IF ((text+1) * CharHeight) > ypos THEN c:= (text + 1) * CharHeight;
- ELSE c:= ypos;
- END;
-
- (* Bis zum Beginn der Buttontexte scannen *)
- WHILE (str[i] # '[') DO IF i > h THEN RETURN -1; END; INC (i); END;
-
- (* Buttons auslesen. Die Buttons sind durch | getrennt. Ein '[' kennzeichnet
- * die Auslsetaste des Buttons.
- *)
- butt:= 1; bw:= 0;
-
- DefaultButton := FALSE; (* Bisher kein Default-Button gefunden *)
-
- LOOP
- Button[butt].text[0]:= ' '; j:= 1; INC (i);
- IF i > h THEN RETURN -1; END;
- (* Undo-Button kann mit ':', Defaultbutton mit '.' erzwungen werden *)
- set:= {Exit, SELECTABLE};
- IF str[i] = ':'
- THEN
- INCL(set, UndoButton); (* Undo eintragen *)
- INC(i); (* Marker berspringen *)
- ELSIF (str[i] = '.') AND ~DefaultButton
- THEN
- INCL(set, DEFAULT); (* DEFAULT eintragen *)
- DefaultButton := TRUE; (* merken, da bersteuert wurde *)
- INC(i); (* Marker berspringen *)
- END;
-
- WHILE (str[i] # '|') AND (str[i] # ']') AND (i <= h) AND (j < cMaxChars) DO
- Button[butt].text[j]:= str[i]; INC (i); INC (j);
- END;
- Button[butt].text[j]:= ' '; INC (j); Button[butt].text[j]:= 0C;
- (* fr Button-bersteuerung entfernt
- IF butt = def THEN set:= {DEFAULT, SELECTABLE, Exit};
- ELSE set:= {Exit, SELECTABLE};
- END;
- *)
-
- (* Merken, welche Objektnummer wir gekriegt haben *)
- Button[butt].objc:= objc;
-
- (* Button in den Baum eintragen *)
- SetObjc (objc, 0121AH, 0, c, CharWidth * j, CharHeight, set, {},
- ADR (Button[butt].text));
-
- (* Buttons auf gleiche Gre bringen *)
- IF butt > 1 THEN
- IF Tree[objc].obWidth < Tree[objc - 1].obWidth THEN
- Tree[objc].obWidth:= Tree[objc - 1].obWidth;
- ELSIF Tree[objc].obWidth > Tree[objc - 1].obWidth THEN
- FOR idx := 1 TO butt DO
- Tree[Button[idx].objc].obWidth:= Tree[objc].obWidth;
- END;
- END;
- END;
-
- INC (objc); INC (butt);
- IF str[i] = ']' THEN EXIT; END;
- IF (butt > cMaxButt+1) THEN RETURN -1; END;
- END; (* LOOP *)
-
- DEC (butt);
-
- bw:= 0;
- FOR i:= 1 TO butt DO
- INC (bw, Tree[Button[i].objc].obWidth);
- IF i > 1 THEN INC (bw, cw2); END;
- (* Wenn kein erzwungener Defaultbutton da war, jetzt den bergebenen setzen *)
- IF ~DefaultButton AND (i = def)
- THEN
- INCL (Tree[Button[i].objc].obFlags, DEFAULT);
- END;
- END;
-
- (* Grundobjekt korrigieren *)
- IF tw > bw THEN w2:= tw + CharWidth; ELSE w2:= bw; END;
- INC (w2, cw2); (* Abstand linker Rand *)
- INC (w2, cw2); (* Abstand rechten Rand *)
- Tree[Box].obWidth:= w2;
- Tree[Box].obHeight:= Tree[Button[butt].objc].obY + (2 * CharHeight);
- Tree[Mover].obX:= Tree[Box].obWidth - Tree[Mover].obWidth;
-
- (* Buttons zentrieren *)
- CASE buttmode OF
- Left: w2:= cw2;|
- Center: w2:= (Tree[Box].obWidth - bw) DIV 2;|
- ELSE w2:= (Tree[Box].obWidth - bw) - cw2;
- END;
-
- FOR i:= 1 TO butt DO
- Tree[Button[i].objc].obX:= w2;
- INC (w2, Tree[Button[i].objc].obWidth); INC (w2, cw2);
- END;
-
- IF NOT NewDial (TheAlert) THEN
- butt := MagicAES.FormAlert (1, "[3][mtAlerts:|Nicht genug Speicher|fr Alert!][Abbruch]");
- RETURN -1;
- END;
- IF mode = 2 THEN DialCenter (TheAlert, CPOS, xp, xp, clip);
- ELSE DialCenter (TheAlert, CSCREEN, 0, 0, clip);
- END;
- IF IsOverloadedDialDo()
- THEN
- (* MagicAES.WindUpdate (MagicAES.BEGUPDATE); *)
- StoreMouse; MouseArrow;
- c:= DialDo (TheAlert, -1);
- RestoreMouse;
- bool:= DoubleClick (c);
- (* MagicAES.WindUpdate (MagicAES.ENDUPDATE); *)
- ELSE
- MagicAES.WindUpdate (MagicAES.BEGUPDATE);
- DialForm (TheAlert, DSTART, s, x);
- DialDraw (TheAlert, 0, 1, clip, FALSE);
- StoreMouse; MouseArrow;
- c:= DialDo (TheAlert, -1);
- RestoreMouse;
- bool:= DoubleClick (c);
- DialForm (TheAlert, DFINISH, s, x);
- DisposeDial (TheAlert);
- MagicAES.WindUpdate (MagicAES.ENDUPDATE);
- END;
-
- FOR j:= 1 TO butt DO
- IF c = Button[j].objc THEN RETURN j; END;
- END;
- RETURN -1;
- END idoAlert;
-
- PROCEDURE doAlert (xp, yp, mode, def: sINTEGER; REF str: ARRAY OF CHAR): sINTEGER;
- VAR res: sINTEGER;
- BEGIN
- IF inAlert THEN RETURN -1 END;
- inAlert := TRUE;
- res := idoAlert (xp, yp, mode, def, str);
- inAlert := FALSE;
- RETURN res;
- END doAlert;
-
- PROCEDURE Alert (def: sINTEGER; REF str: ARRAY OF CHAR): sINTEGER;
- BEGIN
- RETURN doAlert (0, 0, 0, def, str);
- END Alert;
-
- PROCEDURE PosAlert (x, y, def: sINTEGER; REF str: ARRAY OF CHAR): sINTEGER;
- BEGIN
- RETURN doAlert (x, y, 2, def, str);
- END PosAlert;
-
- PROCEDURE SetIconColor (color: sINTEGER);
- BEGIN
- IconColor:= color;
- END SetIconColor;
-
- PROCEDURE ConfigAlert (mode: AlertMode);
- VAR i: sINTEGER;
- BEGIN
- CASE mode OF
- left: buttmode:= Left;|
- center: buttmode:= Center;|
- right: buttmode:= Right;|
- gemicon: FOR i:= 1 TO 3 DO Slot[i]:= Icontree^[i].obSpec.ImagePtr; END;|
- alticon: FOR i:= 1 TO 3 DO Slot[i]:= Icontree^[i+3].obSpec.ImagePtr; END;|
- ELSE ;
- END;
- END ConfigAlert;
-
- VAR init: sCARDINAL;
-
- PROCEDURE InitMtAlerts;
- CONST MacBut = 8;
- alRight = 9;
- alCenter = 10;
- alLeft = 11;
- CONST Magic = 'MagC';
-
- VAR i: sINTEGER;
- a: RECORD
- CASE : INTEGER OF
- 0 : lc : lCARDINAL; |
- 1 : x : RECORD
- v : INTEGER;
- s : sBITSET;
- END;
- END;
- END;
- BEGIN
- IF init # 30961 THEN
- (* Hmm, eine uninitialisierte Variable ist natrlich eine schwammige
- * Methode, aber wie soll man sonst feststellen, ob der Modulkrper
- * bereits durchlaufen wurde? Alles 'legale' mte im Modulkrper
- * ausgefhrt werden! Der Gott der Informatiker mge mir verzeihen...
- *)
- (* Initialisierung der Alertroutinen *)
- inAlert := FALSE;
- IconColor:= 1; TheAlert:= ADR (Tree);
- Tree[Box].obX:= 0; Tree[Box].obY:= 0;
- FOR i:= 1 TO cMaxIcon DO Slot[i]:= NIL; END;
- FOR i:= 0 TO 23 DO Tree[i].obType := GBOX; END;
-
- (* Erstmal Speicher fr Ressource dafr allozieren *)
- ALLOCATE (rscData, TSIZE (tRscData));
- IF rscData = NIL THEN HALT END; (* Kein Speicher fr interne Ressource *)
- (* Jetzt Resourcedaten kopieren *)
- rscData^ := RscData;
- (* Und jetzt relozieren *)
- IF mtRsc.RelocRsc (rscData, rsc) THEN
- Icontree:= mtRsc.GaddrRsc (rsc, MagicAES.RTREE, 0);
- ELSE
- HALT; (* Resource laden fehlgeschlagen! Bser Fehler!!! *)
- END;
- (* Jetzt nach Cookie suchen und ggf. Einstellungen daraus bernehmen *)
- IF FindCookie (Magic, a.lc) THEN
- (* Cookie gefunden *)
- WITH a.x DO
- IF v = 00H (* Versionsnummer im ersten Wort *)
- THEN
- IF MacBut IN s
- THEN
- ConfigAlert (alticon)
- ELSE
- ConfigAlert (gemicon)
- END;
- IF alLeft IN s
- THEN
- ConfigAlert (left);
- ELSIF alRight IN s
- THEN
- ConfigAlert (right);
- ELSE
- ConfigAlert (center);
- END;
- END;
- END (* WITH *)
- ELSE
- ConfigAlert (center); ConfigAlert (gemicon);
- END;
- init:= 30961;
- END;
- END InitMtAlerts;
-
- BEGIN
- init:= 0;
- inAlert := FALSE;
- InitMtAlerts;
- END mtAlerts.
-
-